package cl.mt.data;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Collection;
import java.util.LinkedList;

import cl.mt.dto.DTOBanner;
import cl.mt.util.bd.DatosTabla;
import cl.mt.util.bd.Parametro;

public class DataBanner extends DatosTabla {
	private static final String sqlGetId = "SELECT MAX(ID_BANNER)+1 AS IDX FROM MASTRANSPORTE.MST_BANNER";
	private static final String sqlFindByPK = "SELECT ID_BANNER, NOMBRE, TIPO, DESCRIPCION, ORDEN, ESTADO, FECHA_REGISTRO, ID_ARCHIVO, LINK, ELIMINADO FROM MASTRANSPORTE.MST_BANNER where ID_BANNER=?";
	private static final String sqlFindAll = "SELECT ID_BANNER, NOMBRE, TIPO, DESCRIPCION, ORDEN, ESTADO, FECHA_REGISTRO, ID_ARCHIVO, LINK, ELIMINADO FROM MASTRANSPORTE.MST_BANNER";
	private static final String sqlCreate = "INSERT INTO MASTRANSPORTE.MST_BANNER (ID_BANNER, NOMBRE, TIPO, DESCRIPCION, ORDEN, ESTADO, FECHA_REGISTRO, ID_ARCHIVO, LINK, ELIMINADO) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	private static final String sqlDeleteByPK = "DELETE FROM MASTRANSPORTE.MST_BANNER where ID_BANNER=?";
	private static final String sqlUpdate = "UPDATE MASTRANSPORTE.MST_BANNER SET NOMBRE=?, TIPO=?, DESCRIPCION=?, ORDEN=?, ESTADO=?, FECHA_REGISTRO=?, ID_ARCHIVO=?, LINK=?, ELIMINADO=? where ID_BANNER=?";


	private DTOBanner setDatosRegistro(ResultSet rs) throws SQLException {
		DTOBanner dto = new DTOBanner();
		dto.setId(formatInteger(rs.getObject("ID_BANNER")));
		dto.setNombre(formatString(rs.getObject("NOMBRE")));
		dto.setTipo(formatString(rs.getObject("TIPO")));
		dto.setDescripcion(formatString(rs.getObject("DESCRIPCION")));
		dto.setOrden(formatInteger(rs.getObject("ORDEN")));
		dto.setEstado(formatString(rs.getObject("ESTADO")));
		dto.setFechaRegistro(formatDate(rs.getDate("FECHA_REGISTRO")));
		dto.setIdArchivo(formatInteger(rs.getObject("ID_ARCHIVO")));
		dto.setLink(formatString(rs.getObject("LINK")));
		dto.setEliminado(formatString(rs.getObject("ELIMINADO")));
		return dto;
	}

	public Integer generateId() {
		Parametro[] params = null;
		Integer id = null;
		try {
			getConnection();
			ResultSet rs = executeQuery(sqlGetId, params);
			while (rs.next()) {
				id = formatInteger(rs.getObject("IDX"));
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}
		return id;
	}
	public DTOBanner findByPrimaryKey(Long id) {

		DTOBanner dto = new DTOBanner();
		Parametro[] params = new Parametro[] { getParametro(id, Types.INTEGER)};
		try {
			getConnection();

			ResultSet rs = executeQuery(sqlFindByPK, params);
			while (rs.next()) {
				dto = setDatosRegistro( rs );
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return dto;
	}

	public Collection<DTOBanner> findAll() {

		Parametro[] params = null;
		Collection<DTOBanner> col = new LinkedList<DTOBanner>();
		try {
			getConnection();

			ResultSet rs = executeQuery(sqlFindAll, params);
			while (rs.next()) {
				DTOBanner dto = setDatosRegistro( rs );
				col.add( dto );
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return col;
	}

	public int deleteByPrimaryKey(Integer id) {

		Parametro[] params = new Parametro[] { getParametro(id, Types.INTEGER)};
		int res = -1;
		try {
			getConnection();
			res = executeUpdate(sqlDeleteByPK, params);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return res;
	}

	public int create(DTOBanner dto) {

		Parametro[] params = new Parametro[] {
			getParametro(dto.getId(), Types.INTEGER),
			getParametro(dto.getNombre(), Types.VARCHAR),
			getParametro(dto.getTipo(), Types.VARCHAR),
			getParametro(dto.getDescripcion(), Types.VARCHAR),
			getParametro(dto.getOrden(), Types.INTEGER),
			getParametro(dto.getEstado(), Types.VARCHAR),
			getParametro(formatTimestamp(dto.getFechaRegistro()), Types.TIMESTAMP),
			getParametro(dto.getIdArchivo(), Types.INTEGER),
			getParametro(dto.getLink(), Types.VARCHAR),
			getParametro(dto.getEliminado(), Types.VARCHAR)
		};

		int res = -1;
		try {
			getConnection();
			res = executeUpdate(sqlCreate, params);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return res;
	}

	public int update(DTOBanner dto) {
		Parametro[] params = new Parametro[] {
			getParametro(dto.getNombre(), Types.VARCHAR),
			getParametro(dto.getTipo(), Types.VARCHAR),
			getParametro(dto.getDescripcion(), Types.VARCHAR),
			getParametro(dto.getOrden(), Types.INTEGER),
			getParametro(dto.getEstado(), Types.VARCHAR),
			getParametro(formatTimestamp(dto.getFechaRegistro()), Types.TIMESTAMP),
			getParametro(dto.getIdArchivo(), Types.INTEGER),
			getParametro(dto.getLink(), Types.VARCHAR),
			getParametro(dto.getEliminado(), Types.VARCHAR),
			getParametro(dto.getId(), Types.INTEGER)
		};
		int res = -1;
		try {
			getConnection();
			res = executeUpdate(sqlUpdate, params);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}
		return res;
}
}
